<@import src="funcs/definePk.ftl"/>
<@import src="funcs/getType.ftl"/>
<#assign modelName="${table.pascalCaseName}"/>
package ${basePackage}.service.${moduleName};

import ${basePackage}.core.model.PageData;
import ${basePackage}.core.model.PageWrap;
import ${basePackage}.dao.${moduleName}.model.${modelName};

import java.util.List;

/**
 * ${table.comment}业务方法定义
 */
public interface ${table.pascalCaseName}Service {

    /**
     * 创建
     *
     * @param dto 实体
     * @return Integer
     */
    Integer create(${modelName} dto);

    /**
     * 主键删除
     *
     * @param id 主键
     */
    void deleteById(Integer id);

    /**
     * 批量主键删除
     *
     * @param ids 主键列表
     */
    void deleteByIdInBatch(List<Integer> ids);

    /**
     * 主键更新
     *
     * @param dto 实体
     */
    void updateById(${modelName} dto);

    /**
     * 批量主键更新
     *
     * @param dtos 实体列表
     */
    void updateByIdInBatch(List<${modelName}> dtos);

    /**
     * 主键查询
     *
     * @param id 主键
     * @return ${modelName}
     */
    ${modelName} findById(Integer id);

    /**
     * 条件查询单条记录
     *
     * @param dto 查询条件
     * @return ${modelName}
     */
    ${modelName} findOne(${modelName} dto);

    /**
     * 条件查询
     *
     * @param dto 查询条件
     * @return List<${modelName}>
     */
    List<${modelName}> findList(${modelName} dto);

    /**
     * 分页查询
     *
     * @param pageWrap 分页参数
     * @return PageData<${modelName}ListVO>
     */
    PageData<${modelName}> findPage(PageWrap<${modelName}> pageWrap);

    /**
     * 条件统计
     *
     * @param dto 统计参数
     * @return long
     */
    long count(${modelName} dto);
}
